home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-03 / dosbas.zip / UTIL.ASM < prev   
Assembly Source File  |  1990-12-19  |  6KB  |  199 lines

  1. ;«RM82»«TS8,16,24,32,40,48»
  2. ; A selection of underutilized utilities
  3. ; Updated 11/20/90
  4.  
  5. ;============================================================================
  6. ;   Copyright (C) Copr. 1990 by Sidney J. Kelly
  7. ;           All Rights Reserved.
  8. ;           Sidney J. Kelly
  9. ;           150 Woodhaven Drive
  10. ;           Pittsburgh, PA 15228
  11. ;           home phone 412-561-0950 (7pm to 9:30pm EST)
  12. ;============================================================================
  13.  
  14. DOSSEG
  15. .model medium, basic
  16. .code
  17.  
  18. ; Please do not remove
  19. Copyright       DB    13,10,'Copyright Copr. (C) 1990 Sidney J. Kelly',13,10
  20. Copyright1      DB    'All Rights Reserved',13,10,26
  21.  
  22. ;=============================================================================
  23. ; DECLARE SUB DRIVEALIAS ( ASSIGN%, APPEND%, NETWORK%, SHARE%)
  24. ; CALL DRIVEALIAS( ASSIGN%, APPEND%, NETWORK%, SHARE%)
  25. ; Purpose: To warn programmer that the logical drives may not be as they
  26. ;      seem, so if programmer desires to do some technical manipulation
  27. ;     he will be aware that it may not work.
  28. ;=============================================================================
  29.  
  30. EVEN
  31. DRIVEALIAS PROC FAR BASIC \
  32. ASSIGN:WORD, APPEND:WORD, NETWORK:WORD, SHARE:WORD
  33.  
  34. ; Find if ASSIGN.EXE/ASSIGN.COM is installed
  35. ; Return -1 if yes
  36.  
  37.     Mov     AX,3000h    ; check if DOS version > 2.xx
  38.     Int     21h
  39.     Cmp     AL,3            ; AL contains the major version
  40.     JB      Bad_Dos_Ver     ; If less than 3.00, Error
  41.  
  42.     Mov     BX,ASSIGN       ; get address of variable
  43.     Xor     CX,CX           ; assume that routine is not installed
  44.     Mov    AX,0600h    ; call the check function
  45.     Clc                     ; make sure carry is clear
  46.         Int    2fh
  47.     JC    @f
  48.         Cmp    AL,0FFh        ; as with most other routines
  49.     JNE    @f        ; use AL = FFh to report installed
  50.     Mov     CX,-1           ; report installed
  51. @@:
  52.     Mov     [BX],CX         ; store value in address
  53.  
  54. ; Find if APPEND.EXE is installed
  55. ; Return -1 if yes
  56.     Mov     BX,APPEND
  57.     Xor     CX,CX
  58.     Mov    AX,0B700h
  59.     Clc
  60.         Int    2fh
  61.     Jc    @f
  62.         Cmp    AL,0ffh         ; if AL = 0ffh if installed
  63.     JNE    @f
  64.     Mov     CX,-1
  65. @@:
  66.     Mov     [BX],CX
  67.  
  68. COMMENT        |*
  69. ; Find if DRIVER.SYS is installed
  70. ; Return -1 if yes,
  71. ;  Not tested for because always returns yes under DOS 3.2 +
  72.     Mov     BX,DRIVER
  73.     Xor     CX,CX
  74.     Mov    AX,0800h
  75.     CLC
  76.     Int    2fh
  77.     JC    @f
  78.     Cmp    AL,0FFh
  79.     JNE    @f
  80.     Mov     CX,-1
  81. @@:
  82.     Mov     [BX],CX
  83.         |*
  84.  
  85. ; Find if NETWORK REDIRECTOR is installed
  86. ; Return -1 if yes
  87.     Mov     BX,NETWORK
  88.     Xor     CX,CX
  89.     Mov    AX,1100h
  90.     Clc
  91.     Int    2fh
  92.     JC    @f
  93.     Cmp    AL,0FFh
  94.     JNE    @f
  95.     Mov     CX,-1
  96. @@:
  97.     Mov     [BX],CX
  98.  
  99. ; Find if SHARE.EXE is installed
  100. ; Return -1 if yes
  101.     Mov     BX,SHARE
  102.     Xor     CX,CX
  103.     Mov    AX,1000h
  104.     Clc
  105.     Int    2fh
  106.     JC    @f
  107.     Cmp    AL,0FFh
  108.     JNE    @f
  109.     Mov     CX,-1
  110. @@:
  111.     Mov     [BX],CX
  112. Ender1:
  113.     Ret            ; quit, MASM will claim up stack
  114.  
  115. Bad_Dos_Ver:                    ; because DOS Version 2.xx
  116.     Xor    AX,AX           ; does not initialize the
  117.     Mov     BX,ASSIGN       ; vector to INT 2Fh
  118.     Mov     [BX],AX         ; (unless PRINT.COM is installed)
  119.     Mov     BX,APPEND       ; rather than crash we merely
  120.     Mov     [BX],AX         ; report not installed
  121.     Mov     BX,NETWORK
  122.     Mov     [BX],AX
  123.     Mov     BX,SHARE
  124.     Mov     [BX],AX
  125.         Jmp    Short Ender1
  126. DRIVEALIAS ENDP
  127.  
  128. ;=============================================================================
  129. ; DECLARE SUB SUBSTDRIVE (Drive$,ErrCode%)
  130. ; CALL SUBSTDRIVE(Drive$,ErrCode%)
  131. ;
  132. ; Input:
  133. ;       Drive$ = letter between A to Z
  134. ;       If Drive$ ="" or is outside range, assume it is a request for 
  135. ;       default drive information.
  136. ;
  137. ; Purpose: To warn programmer that the logical drives may not be as they
  138. ;       seem, so if programmer desires to do some technical manipulation
  139. ;       he will be aware that it may not work.
  140. ;
  141. ; Returns:
  142. ;       0 = o.k.
  143. ;       1 = invalid drive
  144. ;       2 = SUBST active on drive
  145. ;=============================================================================
  146.  
  147. EVEN
  148. SUBSTDRIVE PROC FAR BASIC DRIVE:WORD, ERRCODE:WORD
  149.  
  150.     Mov     BX,DRIVE          ; get drive letter
  151.     Mov     CX,[BX]           ; get length of string in CX
  152.     Jcxz    Read_Default      ; if a null string, read default
  153.     
  154.     Mov     BX,[BX+2]         ; get actual string address
  155.     Mov     DL,[BX]           ; read string
  156.     Cmp    DL,'A'          ; is it less than 'A'
  157.     JB    Read_Default      ; if less, then read default
  158.     Cmp    DL,'z'          ; is it greater than 'z' 
  159.     JA    Read_Default      ; if greater, then read default 
  160.     And     DL,1Fh            ; allow A to Z or a to z
  161.     Cmp     DL,0              ; is Drive$ = 0
  162.     JE      Read_Default      ; attempt to read default, jmp & doit
  163.     Cmp     DL,1Ah            ; final range check if 1 to 26
  164.     JA      Read_Default      ; greater than 26 so read default
  165.     Mov     CL,DL             ; save input in CL
  166.     Jmp    Short Read_DPB    ; skip default drive stuff
  167.  
  168. Read_Default:
  169.     Mov    AH,19h          ; read default drive
  170.     Int    21h          ; into AL
  171.     Inc    AL          ; make it one biased
  172.     Mov    CL,AL          ; put drive letter in CL for later comparison
  173.     Xor    DL,DL          ; indicate want default drive block
  174.  
  175. Read_DPB:
  176.     Push    DS          ; save DS because Get DPB changes it
  177.     Mov     AH,32h            ; read disk parameter block (undocumented)
  178.     Int     21h          ; works in DOS Ver 2.x,3.x & 4.x
  179.     Or      AL,AL             ; AL = 0 if drive exists
  180.     JZ      Drive_Exists
  181.     Mov     AX,1              ; else, report drive invalid
  182.     Jmp     Short Sub_Finis   ; and quit
  183.  
  184. Drive_Exists:
  185.     Xor     AX,AX             ; assume no SUBST
  186.     Mov     DL, DS:[BX]       ; get actual logical drive number
  187.     Inc     DL                ; remove 0 bias
  188.     Cmp     DL,CL             ; does input == output?
  189.     JE      Sub_Finis         ; yes, report no error
  190.     Mov     AX,2              ; else, report SUBST is installed
  191.  
  192. Sub_Finis:
  193.     Pop     DS
  194.     Mov     BX,ERRCODE        ; read address
  195.     Mov     [BX],AX           ; store AX in ErrCode%
  196.     Ret
  197. SUBSTDRIVE      ENDP
  198. END
  199.